﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Twodi.Aspect.Interfaces;
using Microsoft.Xna.Framework;
using Twodi.Interfaces;

namespace Twodi.Aspect.Implemented
{
    /// <summary>
    /// Define um componente que possui aceleração.
    /// </summary>
    public class AccelerationAspect : AbstractAspect, IAcceleration
    {
        /// <summary>
        /// Aceleração do componente.
        /// </summary>
        private Vector2 acceleration;

        /// <summary>
        /// Velocidade do componente.
        /// </summary>
        private Vector2 velocity;

        /// <summary>
        /// Aceleração do componente.
        /// </summary>
        public Vector2 Acceleration
        {
            get { return acceleration; }
            set
            {
                OnPropertyChanged<Vector2>("Acceleration", ref this.acceleration, value);
            }
        }

        /// <summary>
        /// Velocidade do componente.
        /// </summary>
        public Vector2 Velocity
        {
            get { return velocity; }
            set { OnPropertyChanged<Vector2>("Velocity", ref this.velocity, value); }
        }

        /// <summary>
        /// Evento invocado quando aceleração é alterada.
        /// </summary>
        public event EventHandler AccelerationChanged;

        /// <summary>
        /// Evento invocado quando velocidade é alterada.
        /// </summary>
        public event EventHandler VelocityChanged;

        protected void onAccelerationChanged(EventArgs e)
        {
            if (AccelerationChanged != null)
            {
                AccelerationChanged(this, e);
            }
        }

        protected void onVelocityChanged(EventArgs e)
        {
            if (VelocityChanged != null)
            {
                VelocityChanged(this, e);
            }
        }
    }
}
